/**
 * @p.md
 * 
 * 身份查找接口
 */
import { PID } from '../actor/pid';
import { ClusterIdentity } from './clusterIdentity';
import { Cluster } from './cluster';

/**
 * 身份查找结果状态
 */
export enum LookupStatus {
  /**
   * 成功
   */
  Success = 'success',
  
  /**
   * 超时
   */
  Timeout = 'timeout',
  
  /**
   * 不可用
   */
  Unavailable = 'unavailable',
  
  /**
   * 错误
   */
  Error = 'error'
}

/**
 * 身份查找结果
 */
export interface LookupResult {
  /**
   * 查找状态
   */
  status: LookupStatus;
  
  /**
   * 如果成功，返回Actor的PID
   */
  pid?: PID;
  
  /**
   * 如果失败，返回错误信息
   */
  error?: string;
}

/**
 * 身份查找接口
 * 用于在集群中查找Actor
 */
export interface IdentityLookup {
  /**
   * 初始化
   * @param cluster 集群引用
   */
  init(cluster: Cluster): Promise<void>;
  
  /**
   * 查找Actor
   * @param clusterIdentity 集群身份
   * @param timeout 超时时间(毫秒)，默认5000ms
   */
  lookup(clusterIdentity: ClusterIdentity, timeout?: number): Promise<LookupResult>;
  
  /**
   * 建立Actor
   * @param clusterIdentity 集群身份
   * @param activatorAddress 激活器地址
   */
  establishActor(clusterIdentity: ClusterIdentity, activatorAddress: string): Promise<LookupResult>;
  
  /**
   * 关闭
   */
  shutdown(): Promise<void>;
} 